package com.pdweb.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.pdweb.vo.Empresas;

public class EmpresasDao extends DBconnection {

	private Connection conn;

	public EmpresasDao() throws ClassNotFoundException, SQLException {
		this.conn = getConnection();
	}

	public EmpresasDao(Connection conn) {
		this.conn = conn;
	}

	public void adicionaEmpresa(Empresas empresa) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("insert into empresas(ST_BAIRRO_EMP, NM_CEP_EMP, ST_CIDADE_EMP, ST_CNPJ_EMP, ST_EMAIL_EMP, ST_NOME_EMP, ST_FANTASIA_EMP, NM_NUMEROEND_EMP, ST_URL_EMP, ST_RUAEND_EMP, NM_TELEFONE_EMP, ST_UF_EMP ) value(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");

			st.setString(1, empresa.getBairro());
			st.setInt(2, empresa.getCep());
			st.setString(3, empresa.getCidade());
			st.setString(4, empresa.getCnpj());
			st.setString(5, empresa.getEmail());
			st.setString(6, empresa.getNome());
			st.setString(7, empresa.getNomeFantasia());
			st.setInt(8, empresa.getNumero());
			st.setString(9, empresa.getPagina());
			st.setString(10, empresa.getRua());
			st.setInt(11, empresa.getTelefone());
			st.setString(12, empresa.getUf());

			st.execute();
		} finally {
			st.close();
		}
	}

	public List<Empresas> obterEmpresas() throws SQLException {

		List<Empresas> empresas = new ArrayList<Empresas>();

		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			rs = st.executeQuery("select * from Empresas");
			while (rs.next()) {
				Empresas result = new Empresas();
				result.setIdEmpresa(rs.getInt("id_Empresa_emp"));
				result.setBairro(rs.getString("ST_BAIRRO_EMP"));
				result.setCep(rs.getInt("NM_CEP_EMP"));
				result.setCidade(rs.getString("ST_CIDADE_EMP"));
				result.setCnpj(rs.getString("ST_CNPJ_EMP"));
				result.setEmail(rs.getString("ST_EMAIL_EMP"));
				result.setNome(rs.getString("ST_NOME_EMP"));
				result.setNomeFantasia(rs.getString("ST_FANTASIA_EMP"));
				result.setNumero(rs.getInt("NM_NUMEROEND_EMP"));
				result.setPagina(rs.getString("ST_URL_EMP"));
				result.setRua(rs.getString("ST_RUAEND_EMP"));
				result.setTelefone(rs.getInt("NM_TELEFONE_EMP"));
				result.setUf(rs.getString("ST_UF_EMP"));

				empresas.add(result);
			}
		} finally {
			st.close();
			rs.close();
		}
		return empresas;
	}

	public void excluirEmpresa(Empresas empresa) throws SQLException {

		PreparedStatement st = null;

		try {
			st = conn
					.prepareStatement("delete from empresas where ID_EMPRESA_emp = ?;");

			st.setInt(1, empresa.getIdEmpresa());
			st.execute();
		} finally {
			st.close();
		}
	}

	public Empresas obterEmpresa(Empresas empresa) throws SQLException {
		Empresas retorno = null;
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();

			String sql = "select * from empresas where id_Empresa_emp = "
					+ empresa.getIdEmpresa();

			rs = st.executeQuery(sql);

			if (rs.next()) {
				retorno = new Empresas();

				retorno.setIdEmpresa(rs.getInt("id_Empresa_emp"));
				retorno.setBairro(rs.getString("ST_BAIRRO_EMP"));
				retorno.setCep(rs.getInt("NM_CEP_EMP"));
				retorno.setCidade(rs.getString("ST_CIDADE_EMP"));
				retorno.setCnpj(rs.getString("ST_CNPJ_EMP"));
				retorno.setEmail(rs.getString("ST_EMAIL_EMP"));
				retorno.setNome(rs.getString("ST_NOME_EMP"));
				retorno.setNomeFantasia(rs.getString("ST_FANTASIA_EMP"));
				retorno.setNumero(rs.getInt("NM_NUMEROEND_EMP"));
				retorno.setPagina(rs.getString("ST_URL_EMP"));
				retorno.setRua(rs.getString("ST_RUAEND_EMP"));
				retorno.setTelefone(rs.getInt("NM_TELEFONE_EMP"));
				retorno.setUf(rs.getString("ST_UF_EMP"));
			}
			return retorno;
		} finally {
			st.close();
			rs.close();
		}
	}

	public void atualizaEmpresa(Empresas empresa) throws SQLException {

		PreparedStatement st = null;
		try {
			st = conn
					.prepareStatement("UPDATE empresas SET ST_BAIRRO_EMP = ?, NM_CEP_EMP = ?, ST_CIDADE_EMP = ?, ST_CNPJ_EMP = ?, ST_EMAIL_EMP = ?, ST_NOME_EMP = ?, ST_FANTASIA_EMP = ?, NM_NUMEROEND_EMP = ?, ST_URL_EMP = ?, ST_RUAEND_EMP = ?, NM_TELEFONE_EMP = ?, ST_UF_EMP = ? WHERE id_Empresa_emp = ?;");
			st.setString(1, empresa.getBairro());
			st.setInt(2, empresa.getCep());
			st.setString(3, empresa.getCidade());
			st.setString(4, empresa.getCnpj());
			st.setString(5, empresa.getEmail());
			st.setString(6, empresa.getNome());
			st.setString(7, empresa.getNomeFantasia());
			st.setInt(8, empresa.getNumero());
			st.setString(9, empresa.getPagina());
			st.setString(10, empresa.getRua());
			st.setInt(11, empresa.getTelefone());
			st.setString(12, empresa.getUf());
			st.setInt(13, empresa.getIdEmpresa());
			st.execute();
		} finally {
			st.close();

		}
	}

	public List<Empresas> consultaEmpresa(String sql) throws SQLException {

		List<Empresas> retorno = new ArrayList<Empresas>();
		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();

			rs = st.executeQuery(sql);

			while (rs.next()) {

				Empresas empresas = new Empresas();

				empresas.setIdEmpresa(rs.getInt("id_Empresa_emp"));
				empresas.setBairro(rs.getString("ST_BAIRRO_EMP"));
				empresas.setCep(rs.getInt("NM_CEP_EMP"));
				empresas.setCidade(rs.getString("ST_CIDADE_EMP"));
				empresas.setCnpj(rs.getString("ST_CNPJ_EMP"));
				empresas.setEmail(rs.getString("ST_EMAIL_EMP"));
				empresas.setNome(rs.getString("ST_NOME_EMP"));
				empresas.setNomeFantasia(rs.getString("ST_FANTASIA_EMP"));
				empresas.setNumero(rs.getInt("NM_NUMEROEND_EMP"));
				empresas.setPagina(rs.getString("ST_URL_EMP"));
				empresas.setRua(rs.getString("ST_RUAEND_EMP"));
				empresas.setTelefone(rs.getInt("NM_TELEFONE_EMP"));
				empresas.setUf(rs.getString("ST_UF_EMP"));

				retorno.add(empresas);

			}
			return retorno;
		} finally {
			st.close();
			rs.close();
		}
	}

	public boolean verificaEmpresa() throws SQLException {

		Statement st = null;
		ResultSet rs = null;

		try {
			st = conn.createStatement();
			rs = st.executeQuery("select * from Empresas");
			if (!rs.next()) {
				return false;
			} else {
				return true;
			}
		} finally {
			st.close();
			rs.close();
		}
	}

}
